bitkeeper revision 1.1236.1.169 (424bb04eB0_EeDkZ4a4b3PYM1jw59Q)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 31 Mar 2005 08:09:50 +0000 (08:09 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 31 Mar 2005 08:09:50 +0000 (08:09 +0000)
Patch from Jens Axboe to synchronously flush block requests from our
backend driver down to the disk(s). Big improvement in blkdev
performance.

linux-2.6.11-xen-sparse/drivers/xen/blkback/blkback.c

index 21b9540f19f681a25c2e1e06b277701db138c71f..6af6dcf0e0cc4e62235b50712be17ee304d25abe 100644 (file)
@@ -512,7 +512,6 @@ static void dispatch_rw_block_io(blkif_t *blkif, blkif_request_t *req)
     for ( i = 0; i < nr_psegs; i++ )
     {
         struct bio *bio;
-        struct bio_vec *bv;
 
         bio = bio_alloc(GFP_ATOMIC, 1);
         if ( unlikely(bio == NULL) )
@@ -525,17 +524,14 @@ static void dispatch_rw_block_io(blkif_t *blkif, blkif_request_t *req)
         bio->bi_private = pending_req;
         bio->bi_end_io  = end_block_io_op;
         bio->bi_sector  = phys_seg[i].sector_number;
-        bio->bi_rw      = operation;
 
-        bv = bio_iovec_idx(bio, 0);
-        bv->bv_page   = virt_to_page(MMAP_VADDR(pending_idx, i));
-        bv->bv_len    = phys_seg[i].nr_sects << 9;
-        bv->bv_offset = phys_seg[i].buffer & ~PAGE_MASK;
+        bio_add_page(
+            bio,
+            virt_to_page(MMAP_VADDR(pending_idx, i)),
+            phys_seg[i].nr_sects << 9,
+            phys_seg[i].buffer & ~PAGE_MASK);
 
-        bio->bi_size    = bv->bv_len;
-        bio->bi_vcnt++;
-
-        submit_bio(operation, bio);
+        submit_bio(operation | (1 << BIO_RW_SYNC), bio);
     }
 #endif